33章 個人の資質
akht.icon
あなたがソフトウェアエンジニアであるとすれば、基本の建築資材は人間の知性であり、主なツールはあなた自身である。
プログラミングのすべての作業は、空中に楼閣を築くことだ。あなたにできる最も純粋な頭脳労働の1つである。
33.1 個人の資質は話題からずれているか
立派なプログラマになりたいなら、自分で自分を変えなければならない(=個人の資質の問題)
雇い主があなたを良いプログラマにすることはできない
優秀なプログラマになると"決心"したのなら、能力が向上する可能性は極めて高い
自分の知性に関してはどうすることもできないが、資質に関しては打つ手がある
そして資質こそが、優れたプログラマの決め手なのである。
33.2 知性と謙虚さ
高い知性がある ≠ 優秀なプログラマである
どれくらい知的であるかよりも、自分の知性をいかに集中させるかの方が重要
最高のプログラマ => 自分の脳がいかに小さいかを理解している謙虚な人々
最低のプログラマ => 作業をこなせるほどの脳を持っていないという事実を受け入れない人々
自尊心が優秀なプログラマになることを阻んでいる
多くの良いプログラミングプラクティスの目的は脳の負担を軽くすること
システムを「分解」すること
レビュー、インスペクション、テスト
ルーチンを短く保つこと
実装の詳細ではなく、業務分野の観点からプログラムを書くこと
規約を用いること
33.3 好奇心
技術的な話題への好奇心だいじ
好奇心を育て、学習を優先させるためにできること
開発プロセスへの認識を高める
能力を養うチャンスがないのであれば不満を示す。競争の激しいソフトウェア市場で働いているなら、今知っておく必要のあることの半分は3年後には時代遅れになる。あなたの利益のことなど眼中にない経営者の下で働いている場合ではない。
実験する
問題解決の本を読む
行動する前に分析し、計画する
成功したプロジェクトから学ぶ
優れたプログラマの仕事を手本にする
ケーススタディも大事
読む!
マニュアル、読もう
他の書籍や定期刊行物を読む
他の専門家と交流を持つ
専門能力を養うことを誓う
罪であるのは、自分の能力を向上させるために必要なことをすべて知った後も、初級者レベルや中級者レベルに甘んじることである。
33.4 知的な誠実さ
知的な誠実はというのはいくつかの形で表れる
専門家でないのに専門家のふりをしない
自分の過ちを素直に認める
コンパイラの警告メッセージをでないようにするのではなく、それを理解することに努める
プログラムのコンパイルが通るかどうかを確かめるのではなく、プログラムをきちんと理解する
現状どおりの進捗を報告する
現実的なスケジュールを見積もり、経営陣がスケジュールの調整を求めてきても一歩も引かない
「いいですか。これだけの経費がかかります。会社にとってこの出費が見合うかどうかは私にはわかりません。それはあなたが決めてください。でも、ソフトウェアの開発にかかる時間ならわかります。それは私の役目ですから。開発にかかる時間に『交渉の余地』はありません。それは1マイルを何フィートにするか交渉するようなものです。自然の法則は交渉できません。ただし、スケジュールに影響するその他の部分については検討の余地がありますし、それに基づいてスケジュールを見直すことは可能です。機能を削るとか、パフォーマンスを落とすとか、プロジェクトを少しずつ開発するとか、人数を減らして工期を延ばすとか、人数を増やして工期を縮めるといった方法があります」
33.5 コミュニケーションとコラボレーション
プログラミングの際には、他のプログラマとのコミュニケーションを第一に考える。コンピュータとのコミュニケーションは二の次でよい。
33.6 創造性と規律
標準や規約を押し付けられると創造性が抑制されるというのは間違いで、実際はその逆
重要でない部分には規約を設けて、創造力はそうする値打ちがある部分に集中させるべき
「形式は自由をもたらす」
33.7 怠惰
怠惰はいろいろな形で現れる
おもしろくない仕事を先延ばしにする => 「本物の怠惰」
おもしろくない仕事はさっさと済ませる => 「啓発的な怠惰」
おもしろくない仕事をするためのツールを作成し、二度と同じ仕事をせずに済ませる => 「長期的な怠惰」
怠惰:全体的なエネルギーの支出を抑えようとする多大な努力に人を向かわせる資質。労働の手間を省くためプログラムを書くようになるが、それを他人も便利だと思うようになるので、プログラムに対する質問にいちいち答えなくてもよいように、何を書いたのかを文書化するようになる。──LarryWall
「奮闘」や「努力」は賞賛されるものではない
いつも忙しそうにしているプログラマと組むことになったら、筆者は彼のことを優秀なプログラマではないと考えるだろう。なぜなら、彼は自分が持っている最も価値の高いツールである脳を使っていないからだ。
33.8 気にするほどのことはない資質
人生他の面では賞賛に値するかもしれないがソフトウェア開発では価値のない資質
粘り強さ
「頑固」「強情」=> 悪い資質
「不屈」「根気」=> 良い資質
(この方法で30分やってダメだったらそのあとの10分で別の方法を考えて、次の1時間でそれを試す、みたいなの大事)
経験
変化が激しい業界なので古い知識や過去の経験が足かせになることもある
独断と偏見に満ちたプログラミング
徹夜ダメ絶対
33.9 習慣
あなたの行いは習慣となり、それが良い習慣となるか悪い習慣となるかが、優秀なプログラマとそうでないプログラマとの分かれ目となる。
BillGatesによれば、優秀なプログラマになれるかどうかは最初の数年で決まるという。その後、プログラマの良し悪しを覆すことはできない(Lammers1986)。
えぇ...akht.icon
33.10 参考資料
akht.icon
『禅とオートバイ修理技術』が挙がっていた。昔(おそらくニート時代)に買ったものの放置されている。今こそ読むときかもしれない...。"刻"が満ちた、ということ。
33.11 まとめ
本を参照〜